Gráficos Interativos em R (Parte 1)

1 Qual é o objetivo desse artigo?

Quando finalizamos as etapas de formatação e manipulação dos dados, podemos criar estatísticas e visualizações de dados a partir dos mesmos. Quando o assunto é análise descritiva, podemos utilizar a Visualização de Dados para entender o comportamento dos dados e idenficar padrões. Entretanto, muitos pacotes geram gráficos estáticos ou inanimados, o que pode decepcionar alguns usuários.

Em contrapartida, os gráficos interativos são criados a partir de elementos animados que aumentam a capacidade de retenção de informação através da interatividade. Sabendo disso, esse post foi escrito com o objetivo de apresentar alguns conceitos envolvendo Visualização de Dados e mostrar algumas bibliotecas do R que auxiliam na confecção de gráficos interativos.

2 Conceitos e htmlwidgets

Quando temos interesse em analisar os dados e identificar um problema de negócio, logo pensamos nas possíveis tendências e correlações que as variáveis de estudo podem ter. Para isso, muito se fala na vantagem de se criar visualizações para identificar padrões de forma rápida e direta.

Mas o que é Visualização de Dados?


Visualização de Dados é a representação de dados em formato gráfico.

E o que é um gráfico?


O gráfico é uma representação com forma geométrica e que é construída a partir de informações obtidas dos dados.

Isso significa que o gráfico é um desenho que tem dimensões, forma, tamanho, comprimento, área, volume, etc.

Dentro do R, existem vários pacotes que podem ser utilizados para criar visualizações estáticas e interativas. Vale lembrar que os gráficos interativos geralmente têm mais aceitabilidade dos analistas, e por conta disso, esse post mostra apenas alguns pacotes para criar visualizações desse tipo.

Dentro desse contexto, o pacote htmlwidgets foi criado para auxiliar na criação de gráficos interativos. Esse pacote funciona como um framework para embutir dentro do R as visualizações feitas em JavaScript. HTML widgets pode ser usado nos scripts em R e também ser embutido nos relatórios de R Markdown e aplicações em Shiny.

Vários pacotes já foram criados utilizando o framework, tais como:

A vantagem em se utilizar esses pacotes está em criar uma visualização interativa com apenas uma linha ou duas de código em R.

3 HighCharter

HighCharter é uma interface R que faz uso da biblioteca gráfica Highcharts http://www.highcharts.com/ construída originalmente em javascript. Com essa biblioteca é possível construir vários tipos de gráficos interativos para diferentes objetos em R.

3.1 Fazendo os Primeiros Gráficos

O pacote HighCharter permite criar gráficos utilizando duas funções diferentes:

  • highchart()
  • hchart()

3.1.1 highchart()

Se você está familiarizado com o pacote ggplot2, essa função é bem similar a ggplot(). Semelhantemente a essa função, diferentes argumentos podem ser utilizados na highchart() para alterar os principais elementos gráficos e mapear as variáveis.

3.1.2 hchart()

hchart() é uma função genérica para plotar diferentes gráficos de forma mais rápida para diferentes classes de objetos. Novamente comparando com o ggplot2, essa função é similar a qplot(). Para saber quais são os métodos suportados da função, basta utilizar o comando methods(hchart).

methods(hchart)
##  [1] hchart.acf*        hchart.character*  hchart.data.frame*
##  [4] hchart.data_frame* hchart.default*    hchart.density*   
##  [7] hchart.dist*       hchart.ets*        hchart.factor*    
## [10] hchart.forecast*   hchart.glm*        hchart.histogram* 
## [13] hchart.igraph*     hchart.matrix*     hchart.mforecast* 
## [16] hchart.mts*        hchart.numeric*    hchart.prcomp*    
## [19] hchart.princomp*   hchart.stl*        hchart.survfit*   
## [22] hchart.ts*         hchart.xts*       
## see '?methods' for accessing help and source code

Em resumo, hchart() será usado quando deseja-se fazer um gráfico mais rápido e highchart() quando deseja-se fazer gráficos mais complicados/robustos.

Além do comando hchart() utilizado outros comandos também podem ser utilizados, como hc_title() e hc_legend() para alterar o título e mostrar/esconder a legenda dos dados, respectivamente. Esses comandos são utilizados junto com o operador %>% do pacote magrittr.

library(magrittr)
library(highcharter)

# Carregando os dados
data(tips, package = 'reshape2')
data(diamonds, package = 'ggplot2')


# Construindo os gráficos
hchart(diamonds$price, color="#0000FF") %>% hc_title(text = "Histograma")
hchart(tips$sex) %>% hc_title(text = "Gráfico de Barras") %>% hc_legend(enabled = F)
hchart(AirPassengers) %>% hc_title(text = "Série Temporal") %>% hc_legend(enabled = F)

3.2 Gráfico de Linhas

highchart() %>%
  hc_add_series(data = women$weight) %>%
  hc_add_series(data = women$height)

Como padrão, highchart() assume como padrão um gráfico de linhas. Ele também assume nome padrão para a série dos dados (i.e. Series 1, Series 2, etc). Mas também é possível alterar o nome da série(name), cor (color), entre outros.

highchart() %>%
  hc_add_series(data = head(diamonds$depth,30), name = "depth", color = "red") %>%
  hc_add_series(data = head(diamonds$price,30), name = "price", color = "blue")
data(citytemp)
hc <- highchart() %>%
  hc_plotOptions(line = list(color = "blue",
                             marker = list(
                               fillColor = "white",
                               lineWidth = 2,
                               lineColor = NULL
                               )
  )) %>%
  hc_add_series(name = "Tokyo", data = citytemp$tokyo) %>%
  hc_add_series(name = "London", data = citytemp$london,
               marker = list(fillColor = "black"))

hc %>%
   hc_add_series(name = "New York",
                data = citytemp$new_york,
                color = "red")

3.3 Gráfico de Densidade

highchart() %>%
  hc_add_series(data = density(rnorm(300)),
                type = "area",
                color = "white",
                fillColor = "rgba(0,0,255,0.3)",
                marker = list(lineColor = "red",
                              lineWidth = 2,
                              fillColor = "white")) %>%
  hc_legend(enabled = F)

3.4 Gráfico de Barras

highchart() %>%
  hc_chart(type ="column") %>%
  hc_xAxis(categories = levels(tips$day)) %>%
  hc_add_series(data = tapply(tips$total_bill,tips$day,sum))

3.5 Gráfico de Dispersão

hchart(tips, type="scatter",hcaes(x="total_bill", y="tip")) %>% hc_title(text = "Gráfico de Dispersão")
hchart(tips, type="scatter",hcaes(x="total_bill", y="tip", group="day")) %>% hc_title(text = "Gráfico de Dispersão por Grupo")

3.6 Gráfico de Setores

highchart() %>%
 hc_chart(type = "pie") %>%
 hc_add_series_labels_values(labels = levels(tips$day), values = tapply(tips$total_bill,tips$day,sum)) %>%
  hc_tooltip(pointFormat = paste('{point.y}<br/><b>{point.percentage:.1f}%</b>'),enabled= TRUE)

3.7 Gráfico de Candlestick

library(quantmod) # Pacote para carregar os dados do mercado financeiro
x <- getSymbols("IBM", auto.assign = FALSE)
x <- hchart(x)
x

3.8 Mapa

Para gerar o mapa do Brasil, foram utilizadas as estimativas do total da população das Unidades da Federação brasileiras disponibilizadas pelo IBGE (Instituto Brasileiro de Geografia e Estatística) no link Dados IBGE.

#options(encoding="UTF-8")

map <- get_data_from_map(download_map_data("countries/br/br-all"))
map2 <- download_map_data("countries/br/br-all")
# str(map)

## Carregando a base de dados formatada e baixada do site do IBGE

xls <- readxl::read_xls(path = "estimativa_TCU_2018_20190213.xls",
                         sheet = 1,
                         range = "A1:B28")

colnames(xls) <- c("Estado","Populacao")
library(magrittr)
library(dplyr)
dados <- map[,c("woe-name","hc-a2")] %>% left_join(x=.,y=xls, by = c("woe-name" = "Estado"))
# print(dados, n = Inf)

hcmap(map="countries/br/br-all",
      name = "Brasil",
      data = dados,
      value = "Populacao",
      joinBy = "hc-a2",
      dataLabels = list(enabled = TRUE, format = '{point.hc-a2}'))
data(unemployment)

hcmap("countries/us/us-all-all", data = unemployment,
      name = "Unemployment", value = "value", joinBy = c("hc-key", "code"),
      borderColor = "transparent") %>%
  hc_colorAxis(dataClasses = color_classes(c(seq(0, 10, by = 2), 50))) %>%
  hc_legend(layout = "vertical", align = "right",
            floating = TRUE, valueDecimals = 0, valueSuffix = "%")

4 Conclusão

Esse texto teve como objetivo apresentar alguns conceitos envolvendo Visualização de Dados, mostrar alguns comandos da biblioteca gráfica Highcharter do R e para fins de registro pessoal. Esse post não teve como objetivo mostrar todas as funções do pacote, mas mostrar as principais funcionalidades dele. Caso tenha interesse em aprender mais sobre a criação de gráficos interativos, consulte o post Gráficos Interativos em R (Parte 2).

Obrigado por ter lido.

João Matheus S. K. T. Hneda

Jun/2019 - PET-Estatística (UFPR)